package primos;

import java.util.Calendar;

public class Main {
	public static void main(String[] args) {
		int nPrimo = 1000000;
		metodoIterativo(nPrimo);
		metodoRecurssivo(nPrimo);
		System.out.println();
	}

	private static void metodoIterativo(int nPrimo) {
		int cont = 1;
		long inicio = Calendar.getInstance().getTimeInMillis();
		for(int i = 3; i < nPrimo+1; i++){
			boolean isPrimo = true;
			for (int j = 2; j < Math.sqrt(i)+1; j++) {
				isPrimo = ((i != j && i % j == 0 && j != 1) ? false : isPrimo ) ;
			}
			cont = (isPrimo?cont + 1:cont);
		}
		long fim = Calendar.getInstance().getTimeInMillis();
		System.out.printf("QTDE. Numeros Primos entre 1 e %d: %d\n",nPrimo, cont);
		System.out.printf("Iterativo  > Tempo(s): %.9f\n", (fim - inicio) / 1000.0f);
	}

	private static void metodoRecurssivo(int nPrimo) {
		int cont = 1;
		long inicio = Calendar.getInstance().getTimeInMillis();
		for(int i = 3; i < nPrimo+1; i+=2){
//			if(isNumeroPrimo(i, 2)){
//				System.out.println(i);
//			}
			cont = (isNumeroPrimo(i, 2)?cont + 1:cont);
		}
		long fim = Calendar.getInstance().getTimeInMillis();
		System.out.printf("QTDE. Numeros Primos entre 1 e %d: %d\n",nPrimo, cont);
		System.out.printf("Recurssivo > Tempo(s): %.9f\n", (fim - inicio) / 1000.0f);
	}

	private static boolean isNumeroPrimo(int n, int i) {
		return (i > (Math.sqrt(n)) ? true : (n != i && n % i == 0 ? false : isNumeroPrimo(n, i+1) ) );
	}
	
//	QTDE. Numeros Primos entre 1 e 1000000: 78498
//	Recurssivo > Tempo(s): 243,673004150

}